package com.caregiver.watch.business.user.dao;

import com.caregiver.watch.business.user.model.po.UserContact;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户联系人表 Dao 接口
 */
@Mapper
public interface UserContactDao {
    
    /**
     * 根据ID查询联系人
     * @param id 联系人ID
     * @return 用户联系人信息
     */
    UserContact selectUserContactById(Long id);
    
    /**
     * 根据用户ID查询联系人列表
     * @param userId 用户ID
     * @return 联系人列表
     */
    List<UserContact> selectUserContactListByUserId(Long userId);
    
    /**
     * 根据手机号查询联系人
     * @param userId 用户ID
     * @param phoneNumber 手机号
     * @return 联系人信息
     */
    UserContact selectUserContactByPhone(@Param("userId") Long userId, @Param("phoneNumber") String phoneNumber);
    
    /**
     * 查询用户有效联系人列表
     * @param userId 用户ID
     * @return 有效联系人列表
     */
    List<UserContact> selectActiveUserContactList(Long userId);
    
    /**
     * 插入联系人
     * @param userContact 联系人信息
     * @return 插入结果
     */
    int insertUserContact(UserContact userContact);
    
    /**
     * 批量插入联系人
     * @param userContacts 联系人列表
     * @return 插入结果
     */
    int batchInsertUserContact(List<UserContact> userContacts);
    
    /**
     * 更新联系人
     * @param userContact 联系人信息
     * @return 更新结果
     */
    int updateUserContact(UserContact userContact);
    
    /**
     * 根据ID删除联系人(逻辑删除)
     * @param id 联系人ID
     * @return 删除结果
     */
    int deleteUserContactById(Long id);
    
    /**
     * 根据用户ID删除所有联系人(逻辑删除)
     * @param userId 用户ID
     * @return 删除结果
     */
    int deleteUserContactByUserId(Long userId);
    
    /**
     * 检查联系人是否存在
     * @param id 联系人ID
     * @param userId 用户ID
     * @return 是否存在
     */
    boolean checkContactExists(@Param("id") Long id, @Param("userId") Long userId);
    
    /**
     * 检查手机号是否已存在
     * @param userId 用户ID
     * @param phoneNumber 手机号
     * @return 是否存在
     */
    boolean checkPhoneNumberExists(@Param("userId") Long userId, @Param("phoneNumber") String phoneNumber);
}
